// 注解：该tabStore是为选项卡服务的

import {defineStore} from 'pinia'

// 定义Tab类型，规定该store只能有以下两个变量类型
export type Tab = {
    title: string,
    path: string,
}

// 定义store类型，用上面的约束起来
export type TabState = {
    tabList: Tab[]
}


// 定义store,要用上上面定义的state的类型TabState
export const tabStore = defineStore('tabStore', {
    state: ():TabState  => {
        return {
            tabList: []
        }
    },
    getters:{
        getTab(state) {
            return state.tabList
        }
    },
    actions:{
        // 增加选项卡
        addTab(tab: Tab){
            // 判断待新增的tab是否在tabList中已经存在过了
            if (this.tabList.some(item => item.path === tab.path)) return;
            // 添加“首页”选项卡，要保证首页永远在列表的第一个位置
            if (tab.path === '/dashboard') {
                this.tabList.unshift(tab)
            }else {
                // 没有才添加(不是首页选项卡，直接追加到列表中就行)
                this.tabList.push(tab)
            }
        }
    },
    // 持久化
    persist: {
        enabled: true,
        strategies: [
            { storage: sessionStorage, paths: ['tabList'] }
        ],
    },
})